#ifndef CHATSERVER_H
#define CHATSERVER_H

#include <QWidget>
#include <QUdpSocket>
#include <QHostAddress>
#include <QList>
#include <QThread>
#include <QMutex>
#include "database.h"

QT_BEGIN_NAMESPACE
class QTextEdit;
class QPushButton;
class QLabel;
class QSpinBox;
QT_END_NAMESPACE

class ChatServer : public QWidget
{
    Q_OBJECT

public:
    ChatServer(QWidget *parent = nullptr);
    ~ChatServer();

private slots:
    // 启动服务器
    void startServer();
    
    // 停止服务器
    void stopServer();
    
    // 处理接收到的数据
    void handleReadyRead();
    
    // 清空聊天记录
    void clearHistory();
    
    // 加载历史记录
    void loadHistory();

private:
    // 初始化界面
    void setupUI();
    
    // 广播消息给所有客户端
    void broadcastMessage(const QString &message, const QHostAddress &senderAddr, quint16 senderPort);
    
    // 添加日志信息
    void addLog(const QString &message);
    
    // 获取当前时间戳
    QString getCurrentTimestamp();

private:
    QUdpSocket *udpSocket;           // UDP套接字
    QList<QPair<QHostAddress, quint16>> clients;  // 客户端列表
    QMutex clientsMutex;             // 客户端列表互斥锁
    
    // 界面组件
    QTextEdit *logTextEdit;          // 日志显示区域
    QTextEdit *chatTextEdit;         // 聊天记录显示区域
    QPushButton *startButton;        // 启动按钮
    QPushButton *stopButton;         // 停止按钮
    QPushButton *clearButton;        // 清空按钮
    QPushButton *historyButton;      // 历史记录按钮
    QLabel *statusLabel;             // 状态标签
    QSpinBox *portSpinBox;           // 端口输入框
    
    Database *database;              // 数据库对象
    bool isRunning;                  // 服务器运行状态
    quint16 serverPort;              // 服务器端口
};

#endif // CHATSERVER_H
